package com.taotao.content.service.impl;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.taotao.common.pojo.EasyUIDataGridResult;
import com.taotao.common.pojo.TaotaoResult;
import com.taotao.common.utils.JsonUtils;
import com.taotao.content.service.ContentService;
import com.taotao.content.service.jedis.JedisClient;
import com.taotao.mapper.TbContentMapper;
import com.taotao.pojo.TbContent;
import com.taotao.pojo.TbContentExample;
import com.taotao.pojo.TbContentExample.Criteria;

@Service
public class ContentServiceImpl implements ContentService {

	@Autowired
	private TbContentMapper contentMapper;
	
	@Autowired
	private JedisClient jedisClient;
	
	@Value("${CONTENT_KEY}")
	private String CONTENT_KEY;

	//查询内容
	@Override
	public EasyUIDataGridResult getContentList(Integer page, Integer rows, Long categoryId) {
		// 利用pagehelper工具处理分页
		PageHelper.startPage(page, rows);
		//构造条件
		TbContentExample example = new TbContentExample();
		// 判断categoryId是否为0
		if(categoryId != 0L){
			//不为零  根据categoryId来查询
			Criteria criteria = example.createCriteria();
			criteria.andCategoryIdEqualTo(categoryId);
		}
		//执行查询
		List<TbContent> list = contentMapper.selectByExample(example);
		//创建pageinfo工具类对象 对返回的数据封装到result中
		PageInfo<TbContent> pageInfo = new PageInfo<>(list);
		//将数据封装到EasyUIDataGridResult中
		EasyUIDataGridResult result = new EasyUIDataGridResult();
		result.setTotal(pageInfo.getTotal());
		result.setRows(pageInfo.getList());
		
		return result;
	}

	//添加内容
	@Override
	public TaotaoResult insertContent(TbContent content) {
		//补全内容
		Date date = new Date();
		content.setCreated(date);
		content.setUpdated(date);
		//执行插入语句
		contentMapper.insert(content);
		//返回
		return TaotaoResult.ok();
	}

	@Override
	public List<TbContent> getContentListByCategory(Long categoryId) {
		//先查询缓存
		//防止异常   也能正常执行
		try {
			//读取缓存中的数据
			String json = jedisClient.hget(CONTENT_KEY, categoryId+"");
			//判断是否已经查询到数据
			if(StringUtils.isNotBlank(json)){
				//将json转换为list  第二参数是list集合中的泛型
				List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class);
				return list;
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		//查询数据库
		//创建查询条件
		TbContentExample example = new TbContentExample();
		Criteria criteria = example.createCriteria();
		criteria.andCategoryIdEqualTo(categoryId);
		// 根据分类id查询内容
		List<TbContent> list = contentMapper.selectByExample(example);
		//将查询数据库中的数据加入到缓存中
		//防止异常   也能正常执行
		try {
			//使用redis的hash类型来存储
			jedisClient.hset(CONTENT_KEY, categoryId+"", JsonUtils.objectToJson(list));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return list;
	}
	
}
